﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DataLayer.Class;
using DataLayer.Database;
using DataLayer;

namespace WinProgProject2
{
    public partial class RezervasyonIslemleri : Form
    {
        ErrorLogService.Service1Client sv = new ErrorLogService.Service1Client();
        public Musteri musteri = new Musteri();
        Rezervasyon rez = new Rezervasyon();
        MasaIslemleri mai;
        bool kaydedildi = false;
        public RezervasyonIslemleri()
        {
            InitializeComponent();
        }

        private void btnMusteriSec_Click(object sender, EventArgs e)
        {
            MusteriIslemleri mi = new MusteriIslemleri(this);
            mi.ShowDialog();
            musteriBilgisi.Musteri = musteri;
            musteriBilgisi.MusteriBilgileriniYerlestir();

            musteri.rezervasyonYaptir(rez);
        }

        private void txtArama_MouseClick(object sender, MouseEventArgs e)
        {
            txtArama.Clear();
        }

        private void RezervasyonIslemleri_Load(object sender, EventArgs e)
        {

            mai = new MasaIslemleri();
            mai.LvMasalar.LargeImageList = mai.MasaResimleri;
            mai.LvMasalar.Dock = DockStyle.Fill;
            mai.lvDoldur("",-1,dtRezTarih.Value);
            mai.LvMasalar.SelectedIndexChanged += new EventHandler(LvMasalar_SelectedIndexChanged);
            pnlMasalar.Controls.Add(mai.LvMasalar);
            cbxArama.SelectedIndex = 0;
            lvDoldur("", -1);
        }

        public void LvMasalar_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (rez.Musteri.Ad != null)
                {
                    if (mai.LvMasalar.SelectedItems.Count > 0)
                    {

                        Masa seciliMasa = mai.LvMasalar.SelectedItems[0].Tag as Masa;
                        if (seciliMasa.RezerveMi && !kaydedildi)
                            MessageBox.Show("Bu masa belirtilen tarih icin daha onceden rezerve edilmistir.");
                        else if (seciliMasa.RezerveMi && kaydedildi)
                        {
                            MessageBox.Show("Kayıt tamamlandı.");
                            kaydedildi = false;
                        }
                        else
                        {
                            seciliMasa.rezerveEt(rez);
                            rez.Tarih = dtRezTarih.Value;
                            RezervasyonBilgiFormu rbf = new RezervasyonBilgiFormu(rez);
                            rbf.StartPosition = FormStartPosition.Manual;

                            int mX = 0;


                            if (MousePosition.X + rbf.Size.Width > SystemInformation.PrimaryMonitorMaximizedWindowSize.Width)
                                mX = MousePosition.X + (SystemInformation.PrimaryMonitorMaximizedWindowSize.Width - (MousePosition.X + rbf.Size.Width));
                            else
                                mX = MousePosition.X;

                            rbf.Location = new Point(mX, MousePosition.Y);
                            if (rbf.ShowDialog(this) == DialogResult.OK)
                            {
                                btnRezGetir_Click(null,null);
                                kaydedildi = true;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(null, ex.Message + "(" + ex.InnerException + ")", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
                sv.errorEkle(Session.kullaniciKodu, ex.Message, 1, "Rezervasyon İşlemleri");
            }   
        }

        public void lvDoldur(string aranan,int kriter)
        {
            lvRezervasyonlar.Items.Clear();


            foreach (Rezervasyon r in RezervasyonDB.tumRezervasyonlariListele(kriter, aranan))
            {
                ListViewItem lvItem = new ListViewItem(r.RezID.ToString());
                lvItem.SubItems.Add(r.Musteri.Ad.ToString());
                lvItem.SubItems.Add(r.Musteri.Soyad.ToString());
                lvItem.SubItems.Add(r.Masa.MasaID.ToString());
                lvItem.SubItems.Add(r.KisiSayisi.ToString());
                lvItem.SubItems.Add(r.Tarih.Date.ToString());
                lvItem.SubItems.Add(r.Musteri.TelefonNo.ToString());
                lvItem.SubItems.Add(r.Zaman.ToString());
                if (r.BittiMi)
                {
                    lvItem.SubItems.Add("Pasif");
                }
                else lvItem.SubItems.Add("Aktif");
                lvItem.SubItems.Add(r.Aciklama.ToString());

                lvItem.Tag = r;

                lvRezervasyonlar.Items.Add(lvItem);
            }
            
        }

        private void dtRezTarih_ValueChanged(object sender, EventArgs e)
        {
            mai.lvDoldur("", -1, dtRezTarih.Value);
        }

        private void btnRezGetir_Click(object sender, EventArgs e)
        {
            int kriter = cbxArama.SelectedIndex;
            string aranan;
            string gun, ay, yil;

            if (kriter == 0)
            {
                DateTime dt = dtpArama.Value;
                gun = dt.Day.ToString();
                if (gun.Length == 1)
                    gun = "0" + gun;

                ay = dt.Month.ToString();
                if (ay.Length == 1)
                    ay = "0" + ay;

                yil = dt.Year.ToString();

                aranan = yil + "-" + ay + "-" + gun;
            }
            else aranan = txtArama.Text;

            lvDoldur(aranan, kriter);
            lblTumu.Text = "("+dtpArama.Value.ToShortDateString()+")";
        }

        private void cbxArama_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbxArama.SelectedIndex == 0)
 		    {
 		         txtArama.Visible = false;
 		                dtpArama.Visible = true;
 		    }
 		            else
 		            {
 		                txtArama.Visible = true;
 		                dtpArama.Visible = false;
 		            }
        }

        private void lvRezervasyonlar_MouseDoubleClick(object sender, MouseEventArgs e)
        {
               DialogResult dr;
 	           if (lvRezervasyonlar.SelectedItems.Count > 0)
 	            {
 	                Rezervasyon r = lvRezervasyonlar.SelectedItems[0].Tag as Rezervasyon;
 	                string bilgiler="";
 	                bilgiler += "Rezervasyon Bilgileri:\n";
 	                bilgiler += "Müşteri: ";
 	                bilgiler += r.Musteri.Ad + " " + r.Musteri.Soyad + "\n";
 	                bilgiler += "Masa: ";
 	                bilgiler += r.Masa.MasaID + "\n";
 	                bilgiler += "Kisi Sayisi: ";
 	                bilgiler += r.KisiSayisi + "\n";
 		            bilgiler += "Tarih: ";
 	                bilgiler += r.Tarih + "\n";
 	                bilgiler += "\nBu rezervasyonu iptal etmek istediğinize emin misiniz ?";
 	                dr = MessageBox.Show(bilgiler,"Onay Bekleniyor...",MessageBoxButtons.OKCancel);
 	
 	                if (dr == DialogResult.OK)
 	                {
 	                    
 	                    r.sil();
                        btnRezGetir_Click(null,null);
 	                    MessageBox.Show("Rezervasyon iptal edildi.");
 	              }
 	
 	           }
               else
               {
                   MessageBox.Show("Bir rezervasyon seçiniz.");
                   sv.errorEkle(Session.kullaniciKodu, "Rezervasyon Seçilmedi.", 3, "Rezervasyon İşlemleri");
               }
        }

        private void duzenleMenuItem_Click(object sender, EventArgs e)
        {

            Rezervasyon r = lvRezervasyonlar.SelectedItems[0].Tag as Rezervasyon;
           
            
            RezervasyonDuzenleme rd = new RezervasyonDuzenleme(r);
            rd.StartPosition = FormStartPosition.CenterParent;

            int mX = 0;


            if (MousePosition.X + rd.Size.Width > SystemInformation.PrimaryMonitorMaximizedWindowSize.Width)
                mX = MousePosition.X + (SystemInformation.PrimaryMonitorMaximizedWindowSize.Width - (MousePosition.X + rd.Size.Width));
            else
                mX = MousePosition.X;

            rd.Location = new Point(mX, MousePosition.Y);
            if (rd.ShowDialog(this) == DialogResult.OK)
            {
                lvDoldur("", -1);
                kaydedildi = true;
            }
        }

        private void silMenuItem_Click(object sender, EventArgs e)
        {
            DialogResult dr;
            if (lvRezervasyonlar.SelectedItems.Count > 0)
            {
                Rezervasyon r = lvRezervasyonlar.SelectedItems[0].Tag as Rezervasyon;
                string bilgiler = "";
                bilgiler += "Rezervasyon Bilgileri:\n";
                bilgiler += "Müşteri: ";
                bilgiler += r.Musteri.Ad + " " + r.Musteri.Soyad + "\n";
                bilgiler += "Masa: ";
                bilgiler += r.Masa.MasaID + "\n";
                bilgiler += "Kisi Sayisi: ";
                bilgiler += r.KisiSayisi + "\n";
                bilgiler += "Tarih: ";
                bilgiler += r.Tarih + "\n";
                bilgiler += "\nBu rezervasyonu iptal etmek istediğinize emin misiniz ?";
                dr = MessageBox.Show(bilgiler, "Onay Bekleniyor...", MessageBoxButtons.OKCancel);

                if (dr == DialogResult.OK)
                {

                    r.sil();
                    btnRezGetir_Click(null, null);
                    MessageBox.Show("Rezervasyon iptal edildi.");
                }

            }
            else
            {
                MessageBox.Show("Bir rezervasyon seçiniz.");
                sv.errorEkle(Session.kullaniciKodu, "Rezervasyon Seçilmedi.", 3, "Rezervasyon İşlemleri");
            }
        }

        private void bitirMenuItem_Click(object sender, EventArgs e)
        {
            DialogResult dr;
            if (lvRezervasyonlar.SelectedItems.Count > 0)
            {
                Rezervasyon r = lvRezervasyonlar.SelectedItems[0].Tag as Rezervasyon;
                string bilgiler = "";
                bilgiler += "Rezervasyon Bilgileri:\n";
                bilgiler += "Müşteri: ";
                bilgiler += r.Musteri.Ad + " " + r.Musteri.Soyad + "\n";
                bilgiler += "Masa: ";
                bilgiler += r.Masa.MasaID + "\n";
                bilgiler += "Kisi Sayisi: ";
                bilgiler += r.KisiSayisi + "\n";
                bilgiler += "Tarih: ";
                bilgiler += r.Tarih + "\n";
                bilgiler += "\nBu rezervasyonu bitirmek etmek istediğinizden emin misiniz ?";
                dr = MessageBox.Show(bilgiler, "Onay Bekleniyor...", MessageBoxButtons.OKCancel);

                if (dr == DialogResult.OK)
                {

                    r.bitir();
                    btnRezGetir_Click(null, null);
                    MessageBox.Show("Rezervasyon bitirildi ve müşteri puanları güncellendi.");
                }

            }
            else
            {
                MessageBox.Show("Bir rezervasyon seçiniz.");
                sv.errorEkle(Session.kullaniciKodu, "Rezervasyon Seçilmedi.", 5, "Rezervasyon İşlemleri");
            }
        }

        private void sagTikMenu_Opening(object sender, CancelEventArgs e)
        {
            if ((lvRezervasyonlar.SelectedItems[0].Tag as Rezervasyon).BittiMi)
                bitirMenuItem.Enabled = false;
            else
                bitirMenuItem.Enabled = true;

        }

        private void label9_Click(object sender, EventArgs e)
        {
            lvDoldur("",-1);
        }


    }
}
